首先,來解釋一下什麼是 BREAD
一般講到資料庫存取,會用 CRUD 來簡稱資料庫的所有動作,代表資料的建立(Create),讀取(Read),更新(Update),以及刪除(Delete)。
不過筆者通常引用另一種動作簡稱,BREAD,分別代表資料庫的瀏覽(Browse),讀取(Read),更新(Edit),建立(Add),以及刪除(Delete)。多了一個常用「讀取該表所有資料」的瀏覽功能,這只是用詞的不同,釐清就可以了。
下面來一一介紹,怎麼使用 Eloquent Model 進行這五種操作!
其實存取資料表中所有資料的方式,之前不小心已經偷偷使用了,也就是
Model::all();
各位可以在資料表裡面建立一些假的 Post
資料,然後用之前我們示範的
Route::get('/test', function(){
return App\Post::all();
});
看看結果。
如果正確顯示的話,應該可以看到在 posts
裡面的所有資料。
根據 id
取得一筆資料的方式是
Model::find($id);
我們可以試看看,改寫前面的路徑
Route::get('/test', function(){
return App\Post::find(1);
});
只取得 id
為 1 的 Post
資料內容。
{
id: 1,
content: "Laravel demo 6.0",
created_at: null,
updated_at: null
}
編輯單一資料的方式,為修改對應物件的參數之後,執行
$model->save();
來進行儲存。
我們改寫之前的測試路徑
Route::get('/test', function(){
$post = App\Post::find(1);
$post->content = 'Laravel demo 6.0 day 11';
$post->save();
return $post;
});
成功之後,應該會看到
{
id: 1,
content: "Laravel demo 6.0 day 11",
created_at: null,
updated_at: "2019-09-13 08:53:01"
}
不僅僅內容改了,同時也更新了 updated_at
如果要同時編輯多筆資料,我們可以用 update()
這個函式
我們來嘗試看看
Route::get('/test', function(){
$posts = App\Post::all();
$posts->each->update([
'content' => 'Laravel demo 6.0 day 11 test'
]);
return $posts;
});
成功的話,應該可以在資料庫裡面發現所有的 Post
現在內容都是 Laravel demo 6.0 day 11 test
,並且他們的 updated_at
都變了。
(提問:細心的讀者可能會發現,資料庫中的 updated_at
時間,跟現在時間好像不太一樣。請問可能是怎樣的緣故導致,又該怎麼修正呢?留給各位讀者在留言區內回答囉。)
新增的時候,我們先建立物件,然後用前面過的
$model->save();
來進行新增。
我們來嘗試看看
$post = new App\Post;
$post->content = 'Laravel demo 6.0 day 11';
$post->save();
return $post;
成功的話,應該會看到
{
content: "Laravel demo 6.0 day 11",
updated_at: "2019-09-13 09:04:34",
created_at: "2019-09-13 09:04:34",
id: 2
}
不僅僅幫我們填入了 created_at
和 updated_at
,還幫我們將 id
多增加了一位。
刪除資料的語法是
$model->delete();
我們一樣用測試路徑,將之前資料庫 id
為 1 的資料刪除看看。
Route::get('/test', function(){
$post = App\Post::find(1);
$post->delete();
});
這時候連線 http://127.0.0.1/test
,順利的話,我們連線資料庫時,應該會看到資料庫 id
為 1 的資料,成功被刪除了。
要大量刪除資料,我們可以用 destroy()
這個函式。
Route::get('/test', function(){
$posts = App\Post::destroy([2, 3]);
return $posts;
});
成功的話,應該會發現資料庫裡面 id
是 2 和 3 的資料都被刪除了。
總結一下今天我們學到了些什麼,今天我們學到了怎麼利用 Eloquent Model 來存取資料庫,取得資料的方法,以及五種不同的操作!
希望各位覺得今天有收穫,中秋節快樂!
請問像是$post = Post::find(1);
是不是要改成$posts = App\Post::find(1);
?
我沒加App\
會跳錯耶囧
沒錯。如果不想寫這麼長的話,最前面要先 use App\Post;
教學我還是先不用 use
的方式好了,比較簡單
update_at 時間不一致, 應該是要修改 config/app.php 的 timezone?
Laravel 裡面設置時區,建議用 .env
裡面的 APP_TIMEZONE
進行設置喔!
這樣可以在不同主機上使用不同時區時,不需要修改程式碼。
已經照上面設定修改了,用php date()函式可以取得正確的亞洲時間
date('Y-m-d H:i:s');
# 2020-05-14 17:39:17
但db裡面的時間還是一樣沒變是什麼原因呢
{
"updated_at":"2020-05-14T09:39:17.000000Z"
}